﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using YasharEl.Infrastructure.EntityModel;

namespace YasharEl.Infrastructure.TaskEngine
{
    [Serializable]
    public class TaskStatusReason : Enumeration
    {
        #region TypeSafe Static Enumarations

        public static readonly TaskStatusReason New = new NewTaskStatusReason();
        public static readonly TaskStatusReason Approved = new ApprovedTaskStatusReason();
        public static readonly TaskStatusReason Declined = new DeclinedTaskStatusReason();
        public static readonly TaskStatusReason Cancelled = new CancelledTaskStatusReason();
        public static readonly TaskStatusReason Consult = new ConsultTaskStatusReason();
        public static readonly TaskStatusReason Reminder = new ReminderTaskStatusReason();
        public static readonly TaskStatusReason Completed = new CompletedTaskStatusReason();
        public static readonly TaskStatusReason Active = new ActiveTaskStatusReason();
        public static readonly TaskStatusReason Error = new ErrorTaskStatusReason();

        #endregion

        #region Constructors

        protected TaskStatusReason(int value, string shortName, string longName)
            : base(value, shortName, longName)
        {
        }

        protected TaskStatusReason()
        {
        }

        #endregion

        #region Inner Classes - Type safe concrete enumarations.

        [Serializable]
        private class NewTaskStatusReason : TaskStatusReason
        {
            public NewTaskStatusReason()
                : base(1, "חדש", "New Task Reason")
            {

            }
        }

        [Serializable]
        private class ApprovedTaskStatusReason : TaskStatusReason
        {
            public ApprovedTaskStatusReason()
                : base(2, "מאושר", "Approved Task Reason")
            {

            }
        }

        [Serializable]
        private class DeclinedTaskStatusReason : TaskStatusReason
        {
            public DeclinedTaskStatusReason()
                : base(3, "נדחה", "Declined Task Reason")
            {

            }
        }

        [Serializable]
        private class CancelledTaskStatusReason : TaskStatusReason
        {
            public CancelledTaskStatusReason()
                : base(4, "בוטל", "Cancelled Task Reason")
            {

            }
        }

        [Serializable]
        private class ConsultTaskStatusReason : TaskStatusReason
        {
            public ConsultTaskStatusReason()
                : base(5, "התייעצות", "Consult Task Reason")
            {

            }
        }

        [Serializable]
        private class ReminderTaskStatusReason : TaskStatusReason
        {
            public ReminderTaskStatusReason()
                : base(6, "תזכורת", "Reminder Task Reason")
            {

            }
        }

        [Serializable]
        private class CompletedTaskStatusReason : TaskStatusReason
        {
            public CompletedTaskStatusReason()
                : base(7, "הושלם", "Completed Task Reason")
            {

            }
        }

        [Serializable]
        private class ActiveTaskStatusReason : TaskStatusReason
        {
            public ActiveTaskStatusReason()
                : base(8, "פעיל", "Active Task Reason")
            {

            }
        }

        [Serializable]
        private class ErrorTaskStatusReason : TaskStatusReason
        {
            public ErrorTaskStatusReason()
                : base(9, "שגוי", "Error Task Reason")
            {

            }
        }

        #endregion
    }
}
